home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume90
/
unix
/
cshel40a
/
part01
/
run.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-01-15
|
2KB
|
82 lines
/*
* RUN.C
*
* (c)1986 Matthew Dillon 9 October 1986
*
* RUN handles running of external commands.
*
* Version 2.07M by Steve Drew 10-Sep-87
*
* Version 4.00A by Carlo Borreo & Cesare Dieni 13-Jan-90
*
*/
char *FindIt();
do_run(str)
char *str;
{
int retcode;
char buf[200]; /* enough space for 100 char cmd name + path stuff */
char *path, *argline, *trueargline, *copy, *p = av[0];
while(*p++) *p &= 0x7F; /* allow "com mand" */
argline=compile_av(av, 1, ac, ' ', 1);
trueargline= (*argline ? argline : "\n");
if (strlen(av[0]) > 100) { ierror(NULL,509); return -1; }
sprintf(buf,"res_%s",BaseName(av[0]));
if (Getenv(buf, buf+100, 90L) && loadres(av[0])) Setenv(buf,NULL);
retcode=SyncRun(av[0],trueargline,0L,0L);
if (retcode>=0) { free(argline); return retcode; }
if (path = FindIt(av[0],"",buf)) {
retcode = SyncRun(path,trueargline,0L,0L);
free(argline);
return retcode;
}
else free(argline);
if ((path = FindIt(av[0],".sh",buf)) == NULL) {
fprintf(stderr,"Command Not Found %s\n",av[0]);
return -1;
}
av[1] = buf;
copy = malloc(strlen(str)+3);
sprintf(copy,"x %s",str);
retcode = do_source(copy);
free(copy);
return retcode;
}
char *dofind(cmd, ext, buf)
char *cmd, *ext, *buf;
{
char *ptr, *s;
sprintf(buf,"%s%s",cmd,ext);
if (exists(buf)) return buf;
if (BaseName(buf)==buf) {
s = get_var(LEVEL_SET, v_path);
while (*s) {
for (ptr=buf; *s && *s!=','; ) *ptr++ = *s++;
sprintf(ptr, "%s%s", cmd, ext);
if (exists(buf)) return buf;
if (*s) s++;
}
}
return NULL;
}
char *FindIt(cmd,ext,buf)
char *cmd, *ext, *buf;
{
char *response;
Myprocess->pr_WindowPtr = (APTR)(-1);
response=dofind(cmd,ext,buf);
Myprocess->pr_WindowPtr = NULL;
return response;
}